package com.wc.alorithm_luogu.P3842;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

/**
 * @Author congge
 * @Date 2023/10/1 20:50
 * @description 线段
 * https://www.luogu.com.cn/problem/P3842
 */
public class Main {
    public static void main(String[] args) {
        Input in = new Input();
        int n = in.nextInt();
        int[] leftPoint = new int[n + 1];
        int[] rightPoint = new int[n + 1];
        int[] curLen = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            leftPoint[i] = in.nextInt();
            rightPoint[i] = in.nextInt();
            curLen[i] = rightPoint[i] - leftPoint[i];
        }
        /**
         * dp[i][0] 表示到达第 i 行左端点最小步数
         * dp[i][1] 表示到达第 i 行右端点最小步数
         * 上一行的左右端点到下一行的左端点，一定是从下一行的右端点过来的
         * 上一行的左右端点到下一行的右端点，一定是从下一行的左端点过来的
         * 就好计算转移方程了
         */
        int[][] dp = new int[n + 1][2];
        /**
         * 初始化第一行的位置
         */
        dp[1][0] = rightPoint[1] - 1 + curLen[1];
        dp[1][1] = rightPoint[1] - 1;

        for (int i = 2; i <= n; i++) {

            /**
             * 上一行左端点到右端点 再到左端点，最后面的 +1 是从上一行下来的一步
             */
            int ll = dp[i - 1][0] + Math.abs(leftPoint[i - 1] - rightPoint[i]) + curLen[i] + 1;

            /**
             * 上一行右端点到右端点 再到左端点
             */
            int rl = dp[i - 1][1] + Math.abs(rightPoint[i - 1] - rightPoint[i]) + curLen[i] + 1;

            /**
             * 上一行左端点到左端点 再到右端点端点
             */
            int lr = dp[i - 1][0] + Math.abs(leftPoint[i - 1] - leftPoint[i]) + curLen[i] + 1;

            /**
             * 上一行右端点到左端点 再到右端点端点
             */
            int rr = dp[i - 1][1] + Math.abs(rightPoint[i - 1] - leftPoint[i]) + curLen[i] + 1;
            dp[i][0] = Math.min(ll, rl);
            dp[i][1] = Math.min(lr, rr);
        }

        /**
         * 最后别忘记还没有到达 (n,n) 点，只是到达了最后一行的左右端点而已
         */
        System.out.println(Math.min(dp[n][0] + n - leftPoint[n], dp[n][1] + n - rightPoint[n]));
    }

    static class Input {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

        public int nextInt() {
            try {
                in.nextToken();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return (int) in.nval;
        }
    }
}
